<html>
    <head>
    <link rel="stylesheet" href="lmm.css" type="text/css" />
    </head>
<body class="lmm">
<!-- This file is part of the Lisp Machine Manual.		-*-Text-*- -->
<!-- This file documents those functions in lmio; hacks -->
<!-- and various other useful functions from places like qmisc -->
<!-- which are in the global package and seem generally useful. -->
<!-- It is not clear how to organize this, so we will do that later; -->
<!-- this file is here so that the function descriptions can live -->
<!-- somewhere until we sort them out. -->

<div class='section' id='16.1'>16.1 Useful Commands</div>
<div class='defun' id='who-calls'>
  <font class='exdent'>
    <font class='funcname'>who-calls </font>
    <font class='italic' color='purple'>x &optional package</font>
  </font><br>
</div><div class='defun1' id='who-uses'>
<font class='exdent'><font class='funcname'>who-uses </font><font class='italic' color='purple'>x &optional package
</font></font><br><!-- open: 1, close: 0 --><font class="italic">x</font><!-- open: 1, close: 1 --> <!-- MATCHED MATCHED MATCHED --> must be a symbol.  <!-- open: 2, close: 1 --><font class="lisp">who-calls</font><!-- open: 2, close: 2 --> <!-- MATCHED MATCHED MATCHED --> tries
to find all of the compiled functions in the Lisp world
which call <!-- open: 3, close: 2 --><font class="italic">x</font><!-- open: 3, close: 3 --> <!-- MATCHED MATCHED MATCHED --> as a function, use <!-- open: 4, close: 3 --><font class="italic">x</font><!-- open: 4, close: 4 --> <!-- MATCHED MATCHED MATCHED --> as a variable,
or use <!-- open: 5, close: 4 --><font class="italic">x</font><!-- open: 5, close: 5 --> <!-- MATCHED MATCHED MATCHED --> as a constant.  (It won't find things
that use constants which contain <!-- open: 6, close: 5 --><font class="italic">x</font><!-- open: 6, close: 6 --> <!-- MATCHED MATCHED MATCHED -->, such as a list one
of whose elements is <!-- open: 7, close: 6 --><font class="italic">x</font><!-- open: 7, close: 7 --> <!-- MATCHED MATCHED MATCHED -->; it will only find it if <!-- open: 8, close: 7 --><font class="italic">x</font><!-- open: 8, close: 8 --> <!-- MATCHED MATCHED MATCHED -->
itself is used as a constant.)  It tries to find all of the compiled
code objects by searching all of the function cells of
all of the symbols on <!-- open: 9, close: 8 --><font class="italic">package</font><!-- open: 9, close: 9 --> <!-- MATCHED MATCHED MATCHED --> and <!-- open: 10, close: 9 --><font class="italic">package</font><!-- open: 10, close: 10 --> <!-- MATCHED MATCHED MATCHED -->'s decendants.
<!-- open: 11, close: 10 --><font class="italic">package</font><!-- open: 11, close: 11 --> <!-- MATCHED MATCHED MATCHED --> defaults to the <!-- open: 12, close: 11 --><font class="lisp">global</font><!-- open: 12, close: 12 --> <!-- MATCHED MATCHED MATCHED --> package, and so normally
all packages are checked.

If <!-- open: 13, close: 12 --><font class="lisp">who-calls</font><!-- open: 13, close: 13 --> <!-- MATCHED MATCHED MATCHED --> encounters an interpreted function definition, it
simply tells you if <!-- open: 14, close: 13 --><font class="italic">x</font><!-- open: 14, close: 14 --> <!-- MATCHED MATCHED MATCHED --> appears anywhere in the interpreted code.

<!-- open: 15, close: 14 --><font class="lisp">who-uses</font><!-- open: 15, close: 15 --> <!-- MATCHED MATCHED MATCHED --> is currently the same thing as <!-- open: 16, close: 15 --><font class="lisp">who-calls</font><!-- open: 16, close: 16 --> <!-- MATCHED MATCHED MATCHED -->.

The symbol <!-- open: 17, close: 16 --><font class="lisp">unbound-function</font><!-- open: 17, close: 17 --> <!-- MATCHED MATCHED MATCHED --> is treated specially by <!-- open: 18, close: 17 --><font class="lisp">who-calls</font><!-- open: 18, close: 18 --> <!-- MATCHED MATCHED MATCHED -->.
<!-- open: 19, close: 18 --><font class="lisp">(who-calls 'unbound-function)</font><!-- open: 19, close: 19 --> <!-- MATCHED MATCHED MATCHED --> will search the compiled
code objects for any calls through a symbol which is not currently
defined as a function.  This is useful for finding errors.
</div>

<div class='defun' id='apropos'>
  <font class='exdent'>
    <font class='funcname'>apropos </font>
    <font class='italic' color='purple'>string &optional package</font>
  </font><br>
<!-- open: 20, close: 19 --><font class="lisp">(apropos <!-- open: 21, close: 19 --><font class="italic">string</font><!-- open: 21, close: 20 -->)</font><!-- open: 21, close: 21 --> <!-- MATCHED MATCHED MATCHED --> tries to find all symbols whose
print-names contain <!-- open: 22, close: 21 --><font class="italic">string</font><!-- open: 22, close: 22 --> <!-- MATCHED MATCHED MATCHED --> as a substring.  Whenever it
finds a symbol, it prints out the symbol's name; if the symbol
is defined as a function and/or bound, it tells you so, and prints
the function (if any).  It finds the symbols on <!-- open: 23, close: 22 --><font class="italic">package</font><!-- open: 23, close: 23 --> <!-- MATCHED MATCHED MATCHED --> and
<!-- open: 24, close: 23 --><font class="italic">package</font><!-- open: 24, close: 24 --> <!-- MATCHED MATCHED MATCHED -->'s decendants.  <!-- open: 25, close: 24 --><font class="italic">package</font><!-- open: 25, close: 25 --> <!-- MATCHED MATCHED MATCHED --> defaults to the <!-- open: 26, close: 25 --><font class="lisp">global</font><!-- open: 26, close: 26 --> <!-- MATCHED MATCHED MATCHED -->
package, so normally all packages are searched.
</div>

<div class='defun' id='where-is'>
  <font class='exdent'>
    <font class='funcname'>where-is </font>
    <font class='italic' color='purple'>pname &optional package</font>
  </font><br>
Prints the names of all packages which contain a symbol with the print-name
<!-- open: 27, close: 26 --><font class="italic">pname</font><!-- open: 27, close: 27 --> <!-- MATCHED MATCHED MATCHED -->.  <!-- open: 28, close: 27 --><font class="italic">pname</font><!-- open: 28, close: 28 --> <!-- MATCHED MATCHED MATCHED --> gets upper-cased.  The package <!-- open: 29, close: 28 --><font class="italic">package</font><!-- open: 29, close: 29 --> <!-- MATCHED MATCHED MATCHED --> and
all its sub-packages are searched; <!-- open: 30, close: 29 --><font class="italic">package</font><!-- open: 30, close: 30 --> <!-- MATCHED MATCHED MATCHED --> defaults to the <!-- open: 31, close: 30 --><font class="lisp">global</font><!-- open: 31, close: 31 --> <!-- MATCHED MATCHED MATCHED --> package,
which causes all packages to be searched.
</div>

<div class='defun' id='describe'>
  <font class='exdent'>
    <font class='funcname'>describe </font>
    <font class='italic' color='purple'>x</font>
  </font><br>
<!-- open: 32, close: 31 --><font class="lisp">describe</font><!-- open: 32, close: 32 --> <!-- MATCHED MATCHED MATCHED --> tries to tell you all of the interesting information
about any object <!-- open: 33, close: 32 --><font class="italic">x</font><!-- open: 33, close: 33 --> <!-- MATCHED MATCHED MATCHED --> (except for array contents).  <!-- open: 34, close: 33 --><font class="lisp">describe</font><!-- open: 34, close: 34 --> <!-- MATCHED MATCHED MATCHED --> knows
about arrays, symbols, flonums, packages, stacks, closures, and FEFs, and prints
out the attributes of each in human-readable form.  Sometimes
it will describe something which it finds inside something else;
such recursive descriptions are indented appropriately.  For instance,
<!-- open: 35, close: 34 --><font class="lisp">describe</font><!-- open: 35, close: 35 --> <!-- MATCHED MATCHED MATCHED --> of a symbol will tell you about the symbol's value,
its definition, and each of its properties.  <!-- open: 36, close: 35 --><font class="lisp">describe</font><!-- open: 36, close: 36 --> <!-- MATCHED MATCHED MATCHED --> of a flonum
(regular or small) will show you its internal representation in a way
which is useful for tracking down roundoff errors and the like.

If <!-- open: 37, close: 36 --><font class="italic">x</font><!-- open: 37, close: 37 --> <!-- MATCHED MATCHED MATCHED --> is a named-structure, <!-- open: 38, close: 37 --><font class="lisp">describe</font><!-- open: 38, close: 38 --> <!-- MATCHED MATCHED MATCHED --> handles it specially.
To understand this, you should read the section on named structures
(see <a href='dfstr.html#named-structure'>this link</a>).
First it gets the named-structure symbol, and sees whether its function knows
about the <!-- open: 39, close: 38 --><font class="lisp">:describe</font><!-- open: 39, close: 39 --> <!-- MATCHED MATCHED MATCHED --> operation.  If the operation is known, it applies
the function to two arguments: the symbol <!-- open: 40, close: 39 --><font class="lisp">:describe</font><!-- open: 40, close: 40 --> <!-- MATCHED MATCHED MATCHED -->, and the named-structure
itself.  Otherwise, it looks on the named-structure symbol for information
which might have been left by <!-- open: 41, close: 40 --><font class="lisp">defstruct</font><!-- open: 41, close: 41 --> <!-- MATCHED MATCHED MATCHED -->; this information would
tell it what the symbolic names for the entries in the structure are,
and <!-- open: 42, close: 41 --><font class="lisp">describe</font><!-- open: 42, close: 42 --> <!-- MATCHED MATCHED MATCHED --> knows how to use the names to print out what each field's
name and contents is.
</div>

<div class='defun' id='describe-file'>
  <font class='exdent'>
    <font class='funcname'>describe-file </font>
    <font class='italic' color='purple'>filename</font>
  </font><br>
This prints what the system knows about the file <!-- open: 43, close: 42 --><font class="italic">filename</font><!-- open: 43, close: 43 --> <!-- MATCHED MATCHED MATCHED -->.
It tells you what package it is in and what version of it is loaded.
</div>

<div class='defun' id='describe-package'>
  <font class='exdent'>
    <font class='funcname'>describe-package </font>
    <font class='italic' color='purple'>package-name</font>
  </font><br>
<!-- open: 44, close: 43 --><font class="lisp">(describe-package <!-- open: 45, close: 43 --><font class="italic">package-name</font><!-- open: 45, close: 44 -->)</font><!-- open: 45, close: 45 --> <!-- MATCHED MATCHED MATCHED --> is equivalent to
<!-- open: 46, close: 45 --><font class="lisp">(describe (pkg-find-package <!-- open: 47, close: 45 --><font class="italic">package-name</font><!-- open: 47, close: 46 -->))</font><!-- open: 47, close: 47 --> <!-- MATCHED MATCHED MATCHED -->;
that is, it describes the package whose name is <!-- open: 48, close: 47 --><font class="italic">package-name</font><!-- open: 48, close: 48 --> <!-- MATCHED MATCHED MATCHED -->.
</div>

<div class='defun' id='describe-area'>
  <font class='exdent'>
    <font class='funcname'>describe-area </font>
    <font class='italic' color='purple'>area</font>
  </font><br>
<!-- open: 49, close: 48 --><font class="italic">area</font><!-- open: 49, close: 49 --> <!-- MATCHED MATCHED MATCHED --> may be the name or the number of an area.  Various
attributes of the area are printed.
</div>

<div class='defun' id='room'>
  <font class='exdent'>
    <font class='funcname'>room </font>
    <font class='italic' color='purple'>&optional arg</font>
  </font><br>
<!-- open: 50, close: 49 --><font class="italic">room</font><!-- open: 50, close: 50 --> <!-- MATCHED MATCHED MATCHED --> tells you how much room is left in some areas.  For each
area it tells you about, it prints out the name of the area, the number
of words used in the area, the size of the area, and the percentage
of words which are used in the area.

If <!-- open: 51, close: 50 --><font class="italic">arg</font><!-- open: 51, close: 51 --> <!-- MATCHED MATCHED MATCHED --> is not given, the value of <!-- open: 52, close: 51 --><font class="lisp">room</font><!-- open: 52, close: 52 --> <!-- MATCHED MATCHED MATCHED --> should be a list
of area numbers and/or area names; <!-- open: 53, close: 52 --><font class="lisp">room</font><!-- open: 53, close: 53 --> <!-- MATCHED MATCHED MATCHED --> describes those areas.
If <!-- open: 54, close: 53 --><font class="italic">arg</font><!-- open: 54, close: 54 --> <!-- MATCHED MATCHED MATCHED --> is a fixnum, <!-- open: 55, close: 54 --><font class="lisp">room</font><!-- open: 55, close: 55 --> <!-- MATCHED MATCHED MATCHED --> describes that area.  If <!-- open: 56, close: 55 --><font class="italic">arg</font><!-- open: 56, close: 56 --> <!-- MATCHED MATCHED MATCHED --> is
<!-- open: 57, close: 56 --><font class="lisp">t</font><!-- open: 57, close: 57 --> <!-- MATCHED MATCHED MATCHED -->, <!-- open: 58, close: 57 --><font class="lisp">room</font><!-- open: 58, close: 58 --> <!-- MATCHED MATCHED MATCHED --> describes all areas.
</div>

<div class='defvar' id='room'><font class='exdent'><font class='funcname' id='room'>room</font><font class="italic"> Variable</font><br></font><!-- end font_exdent -->The value of <!-- open: 59, close: 58 --><font class="lisp">room</font><!-- open: 59, close: 59 --> <!-- MATCHED MATCHED MATCHED --> is a list of area names and/or area numbers,
denoting the areas which the function <!-- open: 60, close: 59 --><font class="lisp">room</font><!-- open: 60, close: 60 --> <!-- MATCHED MATCHED MATCHED --> will describe if given
no arguments.  Its initial value is:
<pre class='lisp'>
(working-storage-area macro-compiled-program)
</pre>
</div>

<div class='defun' id='set-memory-size'>
  <font class='exdent'>
    <font class='funcname'>set-memory-size </font>
    <font class='italic' color='purple'>n-words</font>
  </font><br>
<!-- open: 61, close: 60 --><font class="lisp">set-memory-size</font><!-- open: 61, close: 61 --> <!-- MATCHED MATCHED MATCHED --> tells the virtual memory system to only use
<!-- open: 62, close: 61 --><font class="italic">n-words</font><!-- open: 62, close: 62 --> <!-- MATCHED MATCHED MATCHED --> words of main memory for paging.  Of course, <!-- open: 63, close: 62 --><font class="italic">n-words</font><!-- open: 63, close: 63 --> <!-- MATCHED MATCHED MATCHED --> may
not exceed the amount of main memory on the machine.
</div>

<div class='defun' id='recompile-world'>
  <font class='exdent'>
    <font class='funcname'>recompile-world </font>
    <font class='italic' color='purple'>&rest keywords</font>
  </font><br>
<!-- open: 64, close: 63 --><font class="lisp">recompile-world</font><!-- open: 64, close: 64 --> <!-- MATCHED MATCHED MATCHED --> is a rather ad-hoc tool for recompiling all
of the Lisp Machine system packages.  It works by calling the <!-- open: 65, close: 64 --><font class="lisp">pkg-load</font><!-- open: 65, close: 65 --> <!-- MATCHED MATCHED MATCHED -->
facility (see <font color='red'>LINK:(</font>pkg-load-fun)).
It will find all files that need recompiling from any of the packages:
<pre class='lisp'>
system-internals format compiler
chaos supdup peek eine
</pre>
<!-- open: 66, close: 65 --><font class="italic">keywords</font><!-- open: 66, close: 66 --> <!-- MATCHED MATCHED MATCHED --> is a list of keywords; usually it is empty.
The useful keywords are:
<table>
<tr valign='top'>
<td><font class='lisp'> load</font></td><td>After compiling, load in any files which are not loaded.
</td></tr>
<tr valign='top'>
<td><font class='lisp'> noconfirm</font></td><td>Don't ask for confirmation for each package.
</td></tr>
<tr valign='top'>
<td><font class='lisp'> selective</font></td><td>Ask for confirmation for each file.
</td></tr><!-- item_ --></table><!-- end table -->

Any of the other keywords accepted by <!-- open: 67, close: 66 --><font class="lisp">pkg-load</font><!-- open: 67, close: 67 --> <!-- MATCHED MATCHED MATCHED --> will also work.
<!-- These keywords are missing their colons because they are in KWDPKG. -->
</div>

<div class='defun' id='qld'>
  <font class='exdent'>
    <font class='funcname'>qld </font>
    <font class='italic' color='purple'>&optional restart-p</font>
  </font><br>
<!-- open: 68, close: 67 --><font class="lisp">qld</font><!-- open: 68, close: 68 --> <!-- MATCHED MATCHED MATCHED --> is used to generate a new Lisp Machine system after
the cold-load is loaded in.  If you don't know how to use this,
you don't need it.  If <!-- open: 69, close: 68 --><font class="lisp">restart-p</font><!-- open: 69, close: 69 --> <!-- MATCHED MATCHED MATCHED --> is non-<!-- open: 70, close: 69 --><font class="lisp">nil</font><!-- open: 70, close: 70 --> <!-- MATCHED MATCHED MATCHED -->, then
it ignores that it has done anything, and starts from scratch.
</div>

<div class='defun' id='disassemble'>
  <font class='exdent'>
    <font class='funcname'>disassemble </font>
    <font class='italic' color='purple'>function</font>
  </font><br>
<!-- open: 71, close: 70 --><font class="italic">function</font><!-- open: 71, close: 71 --> <!-- MATCHED MATCHED MATCHED --> should be a FEF, or a symbol which is defined as a FEF.
This prints out a human-readable version of the macro-instructions
in <!-- open: 72, close: 71 --><font class="italic">function</font><!-- open: 72, close: 72 --> <!-- MATCHED MATCHED MATCHED -->.  The macro-code instruction set is explained on <font color='red'>LINK:(</font>macro-code).
</div>

<div class='defun' id='print-disk-label'>
  <font class='exdent'>
    <font class='funcname'>print-disk-label </font>
    <font class='italic' color='purple'>function</font>
  </font><br>
Tells you what is on the disk.
</div>

<div class='defun' id='set-current-band'>
  <font class='exdent'>
    <font class='funcname'>set-current-band </font>
    <font class='italic' color='purple'>band</font>
  </font><br>
Sets which "band" (saved virtual memory image) is to be loaded
when the machine is started.  Use with caution!
</div>

<div class='defun' id='set-current-microload'>
  <font class='exdent'>
    <font class='funcname'>set-current-microload </font>
    <font class='italic' color='purple'>band</font>
  </font><br>
Sets which microload (MCR1 or MCR2) is to be loaded when the machine
is started.  Use with caution!
</div>

<div class='section' id='16.2'>16.2 Querying the User</div>
<div class='defun' id='y-or-n-p'>
  <font class='exdent'>
    <font class='funcname'>y-or-n-p </font>
    <font class='italic' color='purple'>&optional stream message</font>
  </font><br>
This is used for asking the user a question whose answer is either
"Yes" or "No".  It types out <!-- open: 73, close: 72 --><font class="italic">message</font><!-- open: 73, close: 73 --> <!-- MATCHED MATCHED MATCHED --> (if any) and reads in one
character from the keyboard.  If the character is Y, T, or space, it
returns <!-- open: 74, close: 73 --><font class="lisp">t</font><!-- open: 74, close: 74 --> <!-- MATCHED MATCHED MATCHED -->.  If the character is N or rubout, it returns <!-- open: 75, close: 74 --><font class="lisp">nil</font><!-- open: 75, close: 75 --> <!-- MATCHED MATCHED MATCHED -->.
Otherwise it prints out <!-- open: 76, close: 75 --><font class="italic">message</font><!-- open: 76, close: 76 --> <!-- MATCHED MATCHED MATCHED --> (if any), followed by "(Y or N)",
to <!-- open: 77, close: 76 --><font class="italic">stream</font><!-- open: 77, close: 77 --> <!-- MATCHED MATCHED MATCHED --> and tries again.  <!-- open: 78, close: 77 --><font class="italic">stream</font><!-- open: 78, close: 78 --> <!-- MATCHED MATCHED MATCHED --> defaults to
<!-- open: 79, close: 78 --><font class="lisp">standard-output</font><!-- open: 79, close: 79 --> <!-- MATCHED MATCHED MATCHED -->.

<!-- open: 80, close: 79 --><font class="lisp">y-or-n-p</font><!-- open: 80, close: 80 --> <!-- MATCHED MATCHED MATCHED --> should only be used for questions which the user knows
are coming.  If the user is not going to be anticipating the question
(e.g., if the question is "Do you really want to delete all of your files?"
out of the blue)
then <!-- open: 81, close: 80 --><font class="lisp">y-or-n-p</font><!-- open: 81, close: 81 --> <!-- MATCHED MATCHED MATCHED --> should not be used, because the user might type ahead
a T, Y, N, space, or rubout, and therefore accidentally answer the question.
In such cases, use <!-- open: 82, close: 81 --><font class="lisp">yes-or-no-p</font><!-- open: 82, close: 82 --> <!-- MATCHED MATCHED MATCHED -->.
</div>

<div class='defun' id='yes-or-no-p'>
  <font class='exdent'>
    <font class='funcname'>yes-or-no-p </font>
    <font class='italic' color='purple'>&optional stream message</font>
  </font><br>
This is used for asking the user a question whose answer is either
"Yes" or "No".  It types out <!-- open: 83, close: 82 --><font class="italic">message</font><!-- open: 83, close: 83 --> <!-- MATCHED MATCHED MATCHED --> (if any) and reads in a line
from the keyboard.  If the line is the string "Yes", it returns <!-- open: 84, close: 83 --><font class="lisp">t</font><!-- open: 84, close: 84 --> <!-- MATCHED MATCHED MATCHED -->.
If the line is "No", it returns <!-- open: 85, close: 84 --><font class="lisp">nil</font><!-- open: 85, close: 85 --> <!-- MATCHED MATCHED MATCHED -->.  (Case is ignored, as are
leading and trailing spaces and tabs.) Otherwise it prints out
<!-- open: 86, close: 85 --><font class="italic">message</font><!-- open: 86, close: 86 --> <!-- MATCHED MATCHED MATCHED --> (if any), followed by `Please type either "Yes" or "No"' to
<!-- open: 87, close: 86 --><font class="italic">stream</font><!-- open: 87, close: 87 --> <!-- MATCHED MATCHED MATCHED --> and tries again.  <!-- open: 88, close: 87 --><font class="italic">stream</font><!-- open: 88, close: 88 --> <!-- MATCHED MATCHED MATCHED --> defaults to
<!-- open: 89, close: 88 --><font class="lisp">standard-output</font><!-- open: 89, close: 89 --> <!-- MATCHED MATCHED MATCHED -->.

To allow the user to answer a yes-or-no question with a single
character, use <!-- open: 90, close: 89 --><font class="lisp">y-or-n-p</font><!-- open: 90, close: 90 --> <!-- MATCHED MATCHED MATCHED -->.  <!-- open: 91, close: 90 --><font class="lisp">yes-or-no-p</font><!-- open: 91, close: 91 --> <!-- MATCHED MATCHED MATCHED --> should be
used for unanticipated or momentous questions.
</div>

<div class='defun' id='setup-keyboard-dispatch-table'>
  <font class='exdent'>
    <font class='funcname'>setup-keyboard-dispatch-table </font>
    <font class='italic' color='purple'>array lists</font>
  </font><br>
Several programs on the Lisp Machine accept characters from
the keyboard and take a different action on each key. This function
helps the programmer initialize a dispatch table for the keyboard.

<!-- open: 92, close: 91 --><font class="italic">array</font><!-- open: 92, close: 92 --> <!-- MATCHED MATCHED MATCHED --> should be a two-dimensional array with dimensions <!-- open: 93, close: 92 --><font class="lisp">(4 220)</font><!-- open: 93, close: 93 --> <!-- MATCHED MATCHED MATCHED -->.
The first subscript to the array represents the Control and Meta keys;
the Control key is the low order bit and the Meta key is the high order bit.
The second subscript is the character typed, with the Control and Meta bits
stripped off.  In other words, the first subscript is the <!-- open: 94, close: 93 --><font class="lisp">%%kbd-control-meta</font><!-- open: 94, close: 94 --> <!-- MATCHED MATCHED MATCHED -->
part of the character and the second is the <!-- open: 95, close: 94 --><font class="lisp">%%kbd-char</font><!-- open: 95, close: 95 --> <!-- MATCHED MATCHED MATCHED --> part.

<!-- open: 96, close: 95 --><font class="italic">lists</font><!-- open: 96, close: 96 --> <!-- MATCHED MATCHED MATCHED --> should be a list of four lists.  Each of these lists
describes a row of the table.  The elements of one of these lists are
called <!-- open: 97, close: 96 --><font class="italic">items</font><!-- open: 97, close: 97 --> <!-- MATCHED MATCHED MATCHED -->,  and may be any of a number of things.  If the item
is not a list, it is simply stored into the next location of the row.
If the item is a list, then its first element is inspected.  If the
first element is the symbol <!-- open: 98, close: 97 --><font class="lisp">:repeat</font><!-- open: 98, close: 98 --> <!-- MATCHED MATCHED MATCHED -->, then the second element should
be a fixnum <!-- open: 99, close: 98 --><font class="italic">n</font><!-- open: 99, close: 99 --> <!-- MATCHED MATCHED MATCHED -->, and the third element is stored into the next <!-- open: 100, close: 99 --><font class="italic">n</font><!-- open: 100, close: 100 --> <!-- MATCHED MATCHED MATCHED -->
locations of the row.  If the first element is <!-- open: 101, close: 100 --><font class="lisp">:repeat-eval</font><!-- open: 101, close: 101 --> <!-- MATCHED MATCHED MATCHED -->, it is
treated as is <!-- open: 102, close: 101 --><font class="lisp">:repeat</font><!-- open: 102, close: 102 --> <!-- MATCHED MATCHED MATCHED --> except that the third element of the item is
a form which is evaluated before being put into the array.  The form
may take advantage of the symbol <!-- open: 103, close: 102 --><font class="lisp">si:rpcnt</font><!-- open: 103, close: 103 --> <!-- MATCHED MATCHED MATCHED -->, which is set to <!-- open: 104, close: 103 --><font class="lisp">0</font><!-- open: 104, close: 104 --> <!-- MATCHED MATCHED MATCHED -->
the first time the form is evaluated, and is increased by one every
subsequent time.  If the first element of an item is <!-- open: 105, close: 104 --><font class="lisp">:eval</font><!-- open: 105, close: 105 --> <!-- MATCHED MATCHED MATCHED -->, then the second
element is evaluated, and the result is stored into the next location of
the row.  Otherwise, the item itself is stored in the next location of the row.
Altogether exactly all 220 locations of the row must be filled in, or else
an error will be signalled.
</div>

<div class='section' id='16.3'>16.3 Stuff That Doesn't Fit Anywhere Else</div>
<div class='defun' id='time'>
  <font class='exdent'>
    <font class='funcname'>time </font>
    <font class='italic' color='purple'>array lists</font>
  </font><br>
<!-- open: 106, close: 105 --><font class="lisp">(time)</font><!-- open: 106, close: 106 --> <!-- MATCHED MATCHED MATCHED --> returns a number which increases by 1 every 1/60
of a second, and wraps around at some point (currently after 18 bits' worth).
Use the <!-- open: 107, close: 106 --><font class="lisp">time-lessp</font><!-- open: 107, close: 107 --> <!-- MATCHED MATCHED MATCHED --> and <!-- open: 108, close: 107 --><font class="lisp">time-difference</font><!-- open: 108, close: 108 --> <!-- MATCHED MATCHED MATCHED --> functions to avoid
getting in trouble due to the wrap-around.
The most important thing about <!-- open: 109, close: 108 --><font class="lisp">time</font><!-- open: 109, close: 109 --> <!-- MATCHED MATCHED MATCHED --> is
that it is completely incompatible with Maclisp; this will get
changed.
</div>

<div class='defun' id='time-lessp'>
  <font class='exdent'>
    <font class='funcname'>time-lessp </font>
    <font class='italic' color='purple'>time1 time2</font>
  </font><br>
<!-- open: 110, close: 109 --><font class="lisp">t</font><!-- open: 110, close: 110 --> <!-- MATCHED MATCHED MATCHED --> if <!-- open: 111, close: 110 --><font class="italic">time1</font><!-- open: 111, close: 111 --> <!-- MATCHED MATCHED MATCHED --> is earlier than <!-- open: 112, close: 111 --><font class="italic">time2</font><!-- open: 112, close: 112 --> <!-- MATCHED MATCHED MATCHED -->, compensating for wrap-around,
otherwise <!-- open: 113, close: 112 --><font class="lisp">nil</font><!-- open: 113, close: 113 --> <!-- MATCHED MATCHED MATCHED -->.
</div>

<div class='defun' id='time-difference'>
  <font class='exdent'>
    <font class='funcname'>time-difference </font>
    <font class='italic' color='purple'>time1 time2</font>
  </font><br>
Assuming <!-- open: 114, close: 113 --><font class="italic">time1</font><!-- open: 114, close: 114 --> <!-- MATCHED MATCHED MATCHED --> is later than <!-- open: 115, close: 114 --><font class="italic">time2</font><!-- open: 115, close: 115 --> <!-- MATCHED MATCHED MATCHED -->, returns the number of 60ths
of a second difference between them, compensating for wrap-around.
</div>

<div class='defun' id='defun-compatibility'>
  <font class='exdent'>
    <font class='funcname'>defun-compatibility </font>
    <font class='italic' color='purple'>x</font>
  </font><br>
This function is used by <!-- open: 116, close: 115 --><font class="lisp">defun</font><!-- open: 116, close: 116 --> <!-- MATCHED MATCHED MATCHED --> and the compiler to convert
Maclisp-style <!-- open: 117, close: 116 --><font class="lisp">defun</font><!-- open: 117, close: 117 --> <!-- MATCHED MATCHED MATCHED -->s to Lisp Machine definitions.  <!-- open: 118, close: 117 --><font class="italic">x</font><!-- open: 118, close: 118 --> <!-- MATCHED MATCHED MATCHED --> should be
the cdr of a <!-- open: 119, close: 118 --><font class="lisp">(defun ...)</font><!-- open: 119, close: 119 --> <!-- MATCHED MATCHED MATCHED --> form.  <!-- open: 120, close: 119 --><font class="lisp">defun-compatibility</font><!-- open: 120, close: 120 --> <!-- MATCHED MATCHED MATCHED --> will return
a corresponding <!-- open: 121, close: 120 --><font class="lisp">(defun ...)</font><!-- open: 121, close: 121 --> <!-- MATCHED MATCHED MATCHED --> or <!-- open: 122, close: 121 --><font class="lisp">(macro ...)</font><!-- open: 122, close: 122 --> <!-- MATCHED MATCHED MATCHED --> form, in the usual Lisp
Machine format.
</div>

<div class='defun' id='set-error-mode'>
  <font class='exdent'>
    <font class='funcname'>set-error-mode </font>
    <font class='italic' color='purple'>&optional (car-sym-mode <!-- open: 123, close: 122 --><font class="lisp">1</font><!-- open: 123, close: 123 --> <!-- MATCHED MATCHED MATCHED -->) (cdr-sym-mode <!-- open: 124, close: 123 --><font class="lisp">1</font><!-- open: 124, close: 124 --> <!-- MATCHED MATCHED MATCHED -->)</font>
  </font><br>
.defunc (car-num-mode <!-- open: 125, close: 124 --><font class="lisp">0</font><!-- open: 125, close: 125 --> <!-- MATCHED MATCHED MATCHED -->) (cdr-num-mode <!-- open: 126, close: 125 --><font class="lisp">0</font><!-- open: 126, close: 126 --> <!-- MATCHED MATCHED MATCHED -->)
<!-- open: 127, close: 126 --><font class="lisp">set-error-mode</font><!-- open: 127, close: 127 --> <!-- MATCHED MATCHED MATCHED --> sets the four "error mode" variables.  See the documentation
of <!-- open: 128, close: 127 --><font class="lisp">car</font><!-- open: 128, close: 128 --> <!-- MATCHED MATCHED MATCHED --> and <!-- open: 129, close: 128 --><font class="lisp">cdr</font><!-- open: 129, close: 129 --> <!-- MATCHED MATCHED MATCHED --> (<font color='red'>LINK:(</font>car-fun)) which explains what these mean.
</div>

<div class='defun' id='print-error-mode'>
  <font class='exdent'>
    <font class='funcname'>print-error-mode </font>
    <font class='italic' color='purple'>&optional mode stream</font>
  </font><br>
This prints an English description of the error-mode number <!-- open: 130, close: 129 --><font class="italic">mode</font><!-- open: 130, close: 130 --> <!-- MATCHED MATCHED MATCHED -->
onto the output stream <!-- open: 131, close: 130 --><font class="italic">stream</font><!-- open: 131, close: 131 --> <!-- MATCHED MATCHED MATCHED -->.  <!-- open: 132, close: 131 --><font class="italic">mode</font><!-- open: 132, close: 132 --> <!-- MATCHED MATCHED MATCHED --> defaults to the mode currently
in effect, and <!-- open: 133, close: 132 --><font class="italic">stream</font><!-- open: 133, close: 133 --> <!-- MATCHED MATCHED MATCHED --> defaults to <!-- open: 134, close: 133 --><font class="lisp">standard-output</font><!-- open: 134, close: 134 --> <!-- MATCHED MATCHED MATCHED -->.
</div>

<div class='defun' id='*rset'>
  <font class='exdent'>
    <font class='funcname'>*rset </font>
    <font class='italic' color='purple'>flag</font>
  </font><br>
Sets the variable <!-- open: 135, close: 134 --><font class="lisp">*rset</font><!-- open: 135, close: 135 --> <!-- MATCHED MATCHED MATCHED --> to <!-- open: 136, close: 135 --><font class="italic">flag</font><!-- open: 136, close: 136 --> <!-- MATCHED MATCHED MATCHED -->.  Nothing looks at this variable;
it is a vestigial crock left over from Maclisp.
</div>

<div class='defun' id='disk-restore'>
  <font class='exdent'>
    <font class='funcname'>disk-restore </font>
    <font class='italic' color='purple'>&optional partition</font>
  </font><br>
<!-- open: 137, close: 136 --><font class="italic">partition</font><!-- open: 137, close: 137 --> <!-- MATCHED MATCHED MATCHED --> may be the name or the number of a disk partition
containing a virtual-memory load, or <!-- open: 138, close: 137 --><font class="lisp">nil</font><!-- open: 138, close: 138 --> <!-- MATCHED MATCHED MATCHED --> or omitted, meaning
to use the default load, which is the one the machine loads automatically
when it is booted.  The specified partition is copied into the paging
area of the disk and then started.  Lisp-machine disks currently contain
seven partitions on which copies of virtual-memory may be saved for
later execution in this way.

<!-- open: 139, close: 138 --><font class="lisp">disk-restore</font><!-- open: 139, close: 139 --> <!-- MATCHED MATCHED MATCHED --> asks the user for confirmation before doing it.
</div>

<div class='defun' id='disk-save'>
  <font class='exdent'>
    <font class='funcname'>disk-save </font>
    <font class='italic' color='purple'>partition</font>
  </font><br>
<!-- open: 140, close: 139 --><font class="italic">partition</font><!-- open: 140, close: 140 --> <!-- MATCHED MATCHED MATCHED --> may be the name or the number of a disk partition
containing a virtual-memory load, or <!-- open: 141, close: 140 --><font class="lisp">nil</font><!-- open: 141, close: 141 --> <!-- MATCHED MATCHED MATCHED -->, meaning
to use the default load, which is the one the machine loads automatically
when it is booted.  The current contents of virtual memory are copied
from main memory and the paging area of the disk into the specified
partition, and then restarted as if it had just been reloaded.

<!-- open: 142, close: 141 --><font class="lisp">disk-save</font><!-- open: 142, close: 142 --> <!-- MATCHED MATCHED MATCHED --> asks the user for confirmation before doing it.
</div>

<div class='section' id='16.4'>16.4 Stuff That Doesn't Fit Anywhere Else</div>
	The <!-- open: 143, close: 142 --><font class="lisp">status</font><!-- open: 143, close: 143 --> <!-- MATCHED MATCHED MATCHED --> and <!-- open: 144, close: 143 --><font class="lisp">sstatus</font><!-- open: 144, close: 144 --> <!-- MATCHED MATCHED MATCHED --> special forms exist for compatibility
with Maclisp.  Programs that wish to run in both Maclisp and Lisp Machine Lisp
can use <!-- open: 145, close: 144 --><font class="lisp">status</font><!-- open: 145, close: 145 --> <!-- MATCHED MATCHED MATCHED --> to determine which of these they are running in.  Also,
<!-- open: 146, close: 145 --><font class="lisp">(sstatus feature ...)</font><!-- open: 146, close: 146 --> <!-- MATCHED MATCHED MATCHED --> can be used as it is in Maclisp.

<div class='defspec' id='status'><font class='exdent'><font class='funcname' id='status'>status</font><font class="italic"> Special Form</font></br></font><!-- end font_exdent --><!-- open: 147, close: 146 --><font class="lisp">(status features)</font><!-- open: 147, close: 147 --> <!-- MATCHED MATCHED MATCHED --> returns a list of symbols indicating features
of the Lisp environment.  The complete list of all symbols which may
appear on this list, and their meanings, is given in the Maclisp
manual.  The default list for the Lisp Machine is:
<pre class='lisp'>
(sort fasload string newio roman trace grindef grind lispm)
</pre>
The value of this list will be kept up to date as features are added
or removed from the Lisp Machine system.  Most important is the symbol
<!-- open: 148, close: 147 --><font class="lisp">lispm</font><!-- open: 148, close: 148 --> <!-- MATCHED MATCHED MATCHED -->, which is the last element of the list; this indicates
that the program is executing on the Lisp Machine.

<!-- open: 149, close: 148 --><font class="lisp">(status feature <!-- open: 150, close: 148 --><font class="italic">symbol</font><!-- open: 150, close: 149 -->)</font><!-- open: 150, close: 150 --> <!-- MATCHED MATCHED MATCHED --> returns <!-- open: 151, close: 150 --><font class="lisp">t</font><!-- open: 151, close: 151 --> <!-- MATCHED MATCHED MATCHED --> if <!-- open: 152, close: 151 --><font class="italic">symbol</font><!-- open: 152, close: 152 --> <!-- MATCHED MATCHED MATCHED -->
is on the <!-- open: 153, close: 152 --><font class="lisp">(status features)</font><!-- open: 153, close: 153 --> <!-- MATCHED MATCHED MATCHED --> list, otherwise <!-- open: 154, close: 153 --><font class="lisp">nil</font><!-- open: 154, close: 154 --> <!-- MATCHED MATCHED MATCHED -->.

<!-- open: 155, close: 154 --><font class="lisp">(status nofeature <!-- open: 156, close: 154 --><font class="italic">symbol</font><!-- open: 156, close: 155 -->)</font><!-- open: 156, close: 156 --> <!-- MATCHED MATCHED MATCHED --> returns <!-- open: 157, close: 156 --><font class="lisp">t</font><!-- open: 157, close: 157 --> <!-- MATCHED MATCHED MATCHED --> if <!-- open: 158, close: 157 --><font class="italic">symbol</font><!-- open: 158, close: 158 --> <!-- MATCHED MATCHED MATCHED -->
is not on the <!-- open: 159, close: 158 --><font class="lisp">(status features)</font><!-- open: 159, close: 159 --> <!-- MATCHED MATCHED MATCHED --> list, otherwise <!-- open: 160, close: 159 --><font class="lisp">nil</font><!-- open: 160, close: 160 --> <!-- MATCHED MATCHED MATCHED -->.

<!-- open: 161, close: 160 --><font class="lisp">(status status)</font><!-- open: 161, close: 161 --> <!-- MATCHED MATCHED MATCHED --> returns a list of all <!-- open: 162, close: 161 --><font class="lisp">status</font><!-- open: 162, close: 162 --> <!-- MATCHED MATCHED MATCHED --> operations.

<!-- open: 163, close: 162 --><font class="lisp">(status sstatus)</font><!-- open: 163, close: 163 --> <!-- MATCHED MATCHED MATCHED --> returns a list of all <!-- open: 164, close: 163 --><font class="lisp">sstatus</font><!-- open: 164, close: 164 --> <!-- MATCHED MATCHED MATCHED --> operations.
</div>

<div class='defspec' id='sstatus'><font class='exdent'><font class='funcname' id='sstatus'>sstatus</font><font class="italic"> Special Form</font></br></font><!-- end font_exdent --><!-- open: 165, close: 164 --><font class="lisp">(sstatus feature <!-- open: 166, close: 164 --><font class="italic">symbol</font><!-- open: 166, close: 165 -->)</font><!-- open: 166, close: 166 --> <!-- MATCHED MATCHED MATCHED --> adds <!-- open: 167, close: 166 --><font class="italic">symbol</font><!-- open: 167, close: 167 --> <!-- MATCHED MATCHED MATCHED --> to the list
of features.

<!-- open: 168, close: 167 --><font class="lisp">(sstatus nofeature <!-- open: 169, close: 167 --><font class="italic">symbol</font><!-- open: 169, close: 168 -->)</font><!-- open: 169, close: 169 --> <!-- MATCHED MATCHED MATCHED --> removes <!-- open: 170, close: 169 --><font class="italic">symbol</font><!-- open: 170, close: 170 --> <!-- MATCHED MATCHED MATCHED --> from
the list of features.
</div>
<!-- eof -->
</body>
</html>

